﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace AjaxDemo.Models
{
    public class ShoppingCart
    {
        /// <summary>
        /// Lấy giỏ hàng từ session. Nếu trong session chưa 
        /// có thì tạo giỏ hàng rỗng và lưu vào session
        /// </summary>
        public static ShoppingCart Cart
        {
            get
            {
                var cart = HttpContext.Current.Session["Cart"] as ShoppingCart;
                if (cart == null) // nếu chưa có trong session -> tạo giỏ rỗng
                {
                    cart = new ShoppingCart();
                    HttpContext.Current.Session["Cart"] = cart;
                }
                return cart;
            }
        }

        //===================================================

        /// <summary>
        /// Danh sách các mặt hàng đã chọn
        /// </summary>
        public List<Product> list = new List<Product>();

        /// <summary>
        /// Thêm mặt hàng vào giỏ nếu trong giỏ chưa có 
        /// hoặc tăng số lượng nếu mặt hàng đã tồn tại trong giỏ
        /// </summary>
        /// <param name="Id">Mã mặt hàng cần thêm vào giỏ</param>
        public void Add(int Id)
        {
            try
            {
                var product = list.Single(p => p.Id == Id);
                product.Quantity++;
            }
            catch
            {
                var db = new EShopV10();
                var product = db.Products.Find(Id);
                product.Quantity = 1;
                list.Add(product);
            }
        }

        /// <summary>
        /// Xóa mặt hàng khỏi giỏ
        /// </summary>
        /// <param name="Id">Mã mặt hàng cần xóa</param>
        public void Remove(int Id)
        {
            var product = list.Single(p => p.Id == Id);
            list.Remove(product);
        }

        /// <summary>
        /// Cập nhật số lượng của mật hàng
        /// </summary>
        /// <param name="Id">Mã mặt hàng cần cập nhật số lượng</param>
        /// <param name="newQuantity">Số lượng mới</param>
        public void Update(int Id, int newQuantity)
        {
            var product = list.Single(p => p.Id == Id);
            product.Quantity = newQuantity;
        }

        /// <summary>
        /// Xóa sạch các mặt hàng trong giỏ
        /// </summary>
        public void Clear()
        {
            list.Clear();
        }

        /// <summary>
        /// Lấy danh sách hàng hóa trong giỏ
        /// </summary>
        public List<Product> Items {
            get
            {
                return list;
            }
        }

        /// <summary>
        /// Lấy tổng số tiền các mặt hàng trong giỏ
        /// </summary>
        public double Amount {
            get
            {
                if (Count > 0)
                {
                    return list.Sum(p => p.Quantity * p.UnitPrice);
                }
                return 0;
            }
        }

        /// <summary>
        /// Lấy tổng số lượng các mặt hàng trong giỏ
        /// </summary>
        public double Count
        {
            get
            {
                return list.Sum(p => p.Quantity);
            }
        }
    }
}